package priv.wangy.micro.common.constant;

import lombok.Getter;
import priv.wangy.micro.common.po.http.rspn.BaseListRspn;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author zhangjq
 * @since 2024-05-20
 */
@Getter
public enum StaffConstant {
    ON_DUTY_ON_POST("100", "在职在岗", "STATUS", StaffStatus.OnDutyOnPost.class),
    ON_DUTY_OFF_POST("200", "在职不在岗", "STATUS", StaffStatus.OnDutyOffPost.class),
    OFF_DUTY_ON_POST("300", "不在职在岗", "STATUS", StaffStatus.OffDutyOnPost.class),
    OFF_DUTY_OFF_POST("400", "不在职不在岗", "STATUS", StaffStatus.OffDutyOffPost.class),

    INTL_FULL_TIME("100", "校内专任", "TYPE"),
    INTL_PART_TIME("200", "校内兼任", "TYPE"),
    EXT_FULL_TIME("300", "校外兼任", "TYPE", StaffType.ExtPartTime.class),
    OTHER_TYPE("400", "其他教师", "TYPE"),

    INTL_STAFF("100", "校本部教职工", "CATEGORY"),
    OTHER_CATEGORY("200", "其他教职工", "CATEGORY"),
    EXT_STAFF("300", "聘请校外教师", "CATEGORY", StaffCategory.ExtStaff.class),


    WU("100", "无", "EDU_DEGREE"),
    XS("200", "学士", "EDU_DEGREE", EduDegree.XS.class),
    SS("300", "硕士", "EDU_DEGREE", EduDegree.SS.class),
    BS("400", "博士", "EDU_DEGREE", EduDegree.BS.class),
    MYBS("500", "名誉博士", "EDU_DEGREE"),

    ;

    public static final BaseListRspn.Field STAFF_STATUS_FIELD = new BaseListRspn.Field("STAFF_STATUS", Arrays.asList(
            StaffStatus.OnDutyOnPost.NORMAL.getProperty(),
            StaffStatus.OnDutyOnPost.REHIRED.getProperty(),
            StaffStatus.OnDutyOnPost.EXTENSION_HIRED.getProperty(),
            StaffStatus.OnDutyOnPost.TO_BE_HIRED.getProperty(),
            StaffStatus.OnDutyOffPost.ASST.getProperty(),
            StaffStatus.OnDutyOffPost.LONG_SICK.getProperty(),
            StaffStatus.OnDutyOffPost.ABORT.getProperty(),
            StaffStatus.OnDutyOffPost.FURLOUGH.getProperty(),
            StaffStatus.OnDutyOffPost.UNACCOUNTED.getProperty(),
            StaffStatus.OnDutyOffPost.SUSPEND.getProperty(),
            StaffStatus.OffDutyOnPost.EXTERNALLY_HIRED.getProperty(),
            StaffStatus.OffDutyOnPost.EXTERNALLY_ASST.getProperty(),
            StaffStatus.OffDutyOffPost.RETIRED.getProperty(),
            StaffStatus.OffDutyOffPost.LEAVE_OFFICE.getProperty(),
            StaffStatus.OffDutyOffPost.DEPARTED.getProperty(),
            StaffStatus.OffDutyOffPost.TRANSFERRED.getProperty(),
            StaffStatus.OffDutyOffPost.RESIGNED.getProperty(),
            StaffStatus.OffDutyOffPost.LEAVE_JOB.getProperty(),
            StaffStatus.OffDutyOffPost.DISCHARGED.getProperty()
    ));
    public static final BaseListRspn.Field STAFF_TYPE_FIELD = new BaseListRspn.Field("TEACHER_TYPE", Arrays.asList(
            new BaseListRspn.Field.Property(INTL_FULL_TIME.getValue(), INTL_FULL_TIME.getDisplay()),
            new BaseListRspn.Field.Property(INTL_PART_TIME.getValue(), INTL_PART_TIME.getDisplay()),
            StaffType.ExtPartTime.INDUSTRY_MENTOR.getProperty(),
            StaffType.ExtPartTime.EXT_TEACHER.getProperty(),
            new BaseListRspn.Field.Property(OTHER_TYPE.getValue(), OTHER_TYPE.getDisplay())
    ));
    public static final BaseListRspn.Field STAFF_CATEGORY_FIELD = new BaseListRspn.Field("STAFF_ATTR", Arrays.asList(
            new BaseListRspn.Field.Property(INTL_STAFF.getValue(), INTL_STAFF.getDisplay()),
            new BaseListRspn.Field.Property(OTHER_CATEGORY.getValue(), OTHER_CATEGORY.getDisplay()),
            StaffCategory.ExtStaff.RES_PUB_INST.getProperty(),
            StaffCategory.ExtStaff.ENTERPRISE.getProperty(),
            StaffCategory.ExtStaff.ABROAD.getProperty(),
            StaffCategory.ExtStaff.COLLEGE.getProperty(),
            StaffCategory.ExtStaff.SUBSTITUTE.getProperty(),
            StaffCategory.ExtStaff.PART_TIME.getProperty(),
            StaffCategory.ExtStaff.OTHER_PT.getProperty()
    ));
    public static final BaseListRspn.Field EDU_DEGREE_FIELD = new BaseListRspn.Field("EDU_DEGREE", Arrays.asList(
            new BaseListRspn.Field.Property(WU.getValue(), WU.getDisplay()),
            EduDegree.XS.ONE.getProperty(),
            EduDegree.XS.TWO.getProperty(),
            EduDegree.XS.THREE.getProperty(),
            EduDegree.XS.FOUR.getProperty(),
            EduDegree.XS.FIVE.getProperty(),
            EduDegree.XS.SIX.getProperty(),
            EduDegree.XS.SEVEN.getProperty(),
            EduDegree.XS.EIGHT.getProperty(),
            EduDegree.XS.NINE.getProperty(),
            EduDegree.XS.ONE_ZERO.getProperty(),
            EduDegree.XS.ONE_ONE.getProperty(),
            EduDegree.XS.ONE_TWO.getProperty(),
            EduDegree.XS.ONE_THREE.getProperty(),
            EduDegree.XS.ONE_FOUR.getProperty(),
            EduDegree.SS.ONE.getProperty(),
            EduDegree.SS.TWO.getProperty(),
            EduDegree.SS.THREE.getProperty(),
            EduDegree.SS.FOUR.getProperty(),
            EduDegree.SS.FIVE.getProperty(),
            EduDegree.SS.SIX.getProperty(),
            EduDegree.SS.SEVEN.getProperty(),
            EduDegree.SS.EIGHT.getProperty(),
            EduDegree.SS.NINE.getProperty(),
            EduDegree.SS.ONE_ZERO.getProperty(),
            EduDegree.SS.ONE_ONE.getProperty(),
            EduDegree.SS.ONE_TWO.getProperty(),
            EduDegree.SS.ONE_THREE.getProperty(),
            EduDegree.SS.ONE_FOUR.getProperty(),
            EduDegree.SS.ONE_FIVE.getProperty(),
            EduDegree.SS.ONE_SIX.getProperty(),
            EduDegree.SS.ONE_SEVEN.getProperty(),
            EduDegree.SS.ONE_EIGHT.getProperty(),
            EduDegree.SS.ONE_NINE.getProperty(),
            EduDegree.SS.TWO_ZERO.getProperty(),
            EduDegree.SS.TWO_TWO.getProperty(),
            EduDegree.SS.TWO_THREE.getProperty(),
            EduDegree.SS.TWO_FOUR.getProperty(),
            EduDegree.SS.TWO_FIVE.getProperty(),
            EduDegree.SS.TWO_SIX.getProperty(),
            EduDegree.SS.TWO_SEVEN.getProperty(),
            EduDegree.SS.TWO_EIGHT.getProperty(),
            EduDegree.SS.TWO_NINE.getProperty(),
            EduDegree.SS.THREE_ZERO.getProperty(),
            EduDegree.SS.THREE_ONE.getProperty(),
            EduDegree.SS.THREE_TWO.getProperty(),
            EduDegree.BS.ONE.getProperty(),
            EduDegree.BS.TWO.getProperty(),
            EduDegree.BS.THREE.getProperty(),
            EduDegree.BS.FOUR.getProperty(),
            EduDegree.BS.FIVE.getProperty(),
            EduDegree.BS.SIX.getProperty(),
            EduDegree.BS.SEVEN.getProperty(),
            EduDegree.BS.EIGHT.getProperty(),
            EduDegree.BS.NINE.getProperty(),
            EduDegree.BS.ONE_ZERO.getProperty(),
            EduDegree.BS.ONE_ONE.getProperty(),
            EduDegree.BS.ONE_TWO.getProperty(),
            EduDegree.BS.ONE_THREE.getProperty(),
            EduDegree.BS.ONE_FOUR.getProperty(),
            EduDegree.BS.ONE_FIVE.getProperty(),
            EduDegree.BS.ONE_SIX.getProperty(),

            new BaseListRspn.Field.Property(MYBS.getValue(), MYBS.getDisplay())));
    private final String value;
    private final String display;
    private final String field;
    private final IStaffConstant[] staffConstants;

    StaffConstant(String value, String display, String field) {
        this.value = value;
        this.display = display;
        this.field = field;
        this.staffConstants = null;
    }

    StaffConstant(String value, String display, String field, Class<? extends IStaffConstant> staffConstants) {
        this.value = value;
        this.display = display;
        this.field = field;
        this.staffConstants = staffConstants.getEnumConstants();
    }

    public static List<String> getOnPostStatus() {
        List<String> status = new ArrayList<>();
        status.addAll(Arrays.stream(StaffStatus.OnDutyOnPost.values()).map(IStaffConstant::getProperty)
                .map(BaseListRspn.Field.Property::getStrValue).toList());
        status.addAll(Arrays.stream(StaffStatus.OffDutyOnPost.values()).map(IStaffConstant::getProperty)
                .map(BaseListRspn.Field.Property::getStrValue).toList());
        return status;
    }

    public static List<String> getOnDutyStatus() {
        List<String> status = new ArrayList<>();
        status.addAll(Arrays.stream(StaffStatus.OnDutyOnPost.values()).map(IStaffConstant::getProperty)
                .map(BaseListRspn.Field.Property::getStrValue).toList());
        status.addAll(Arrays.stream(StaffStatus.OnDutyOffPost.values()).map(IStaffConstant::getProperty)
                .map(BaseListRspn.Field.Property::getStrValue).toList());
        return status;
    }


    public interface IStaffConstant {
        BaseListRspn.Field.Property getProperty();
    }

    public interface EduDegree {
        enum XS implements IStaffConstant {
            ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("201", "学士,哲学学士学位");
                }
            },
            TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("202", "学士,医学学士学位");
                }
            },
            THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("203", "学士,军事学学士学位");
                }
            },
            FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("204", "学士,管理学学士学位");
                }
            },
            FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("205", "学士,艺术学学士学位");
                }
            },
            SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("206", "学士,建筑学学士专业学位");
                }
            },
            SEVEN {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("207", "学士,经济学学士学位");
                }
            },
            EIGHT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("208", "学士,法学学士学位");
                }
            },
            NINE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("209", "学士,教育学学士学位");
                }
            },
            ONE_ZERO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("210", "学士,文学学士学位");
                }
            },
            ONE_ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("211", "学士,历史学学士学位");
                }
            },
            ONE_TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("212", "学士,理学学士学位");
                }
            },
            ONE_THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("213", "学士,工学学士学位");
                }
            },
            ONE_FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("214", "学士,农学学士学位");
                }
            },
        }

        enum SS implements IStaffConstant {
            ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("301", "硕士,哲学硕士学位");
                }
            },
            TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("302", "硕士,医学硕士学位");
                }
            },
            THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("303", "硕士,军事学硕士学位");
                }
            },
            FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("304", "硕士,管理学硕士学位");
                }
            },
            FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("305", "硕士,艺术学硕士学位");
                }
            },
            SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("306", "硕士,法律硕士专业学位");
                }
            },
            SEVEN {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("307", "硕士,教育硕士专业学位");
                }
            },
            EIGHT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("308", "硕士,工程硕士专业学位");
                }
            },
            NINE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("309", "硕士,建筑学硕士专业学位");
                }
            },
            ONE_ZERO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("310", "硕士,临床学硕士专业学位");
                }
            },
            ONE_ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("311", "硕士,工商管理硕士专业学位");
                }
            },
            ONE_TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("312", "硕士,农业推广硕士专业学位");
                }
            },
            ONE_THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("313", "硕士,经济学硕士学位");
                }
            },
            ONE_FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("314", "硕士,兽医硕士专业学位");
                }
            },
            ONE_FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("315", "硕士,公共管理硕士专业学位");
                }
            },
            ONE_SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("316", "硕士,口腔医学硕士专业学位");
                }
            },
            ONE_SEVEN {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("317", "硕士,公共卫生硕士专业学位");
                }
            },
            ONE_EIGHT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("318", "硕士,军事硕士专业学位");
                }
            },
            ONE_NINE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("319", "硕士,法学硕士学位");
                }
            },
            TWO_ZERO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("320", "硕士,教育学硕士学位");
                }
            },
            TWO_ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("321", "硕士,文学硕士学位");
                }
            },
            TWO_TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("322", "硕士,历史学硕士学位");
                }
            },
            TWO_THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("323", "硕士,理学硕士学位");
                }
            },
            TWO_FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("324", "硕士,工学硕士学位");
                }
            },
            TWO_FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("325", "硕士,农学硕士学位");
                }
            },
            TWO_SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("326", "硕士,会计硕士专业学位");
                }
            },
            TWO_SEVEN {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("327", "硕士,体育硕士专业学位");
                }
            },
            TWO_EIGHT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("328", "硕士,艺术硕士专业学位");
                }
            },
            TWO_NINE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("329", "硕士,风景园林硕士专业学位");
                }
            },
            THREE_ZERO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("330", "硕士,汉语国际教育硕士专业学位");
                }
            },
            THREE_ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("331", "硕士,翻译硕士专业学位");
                }
            },
            THREE_TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("332", "硕士,社会工作硕士专业学位");
                }
            },
        }

        enum BS implements IStaffConstant {
            ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("401", "博士,哲学博士学位");
                }
            },
            TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("402", "博士,医学博士学位");
                }
            },
            THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("403", "博士,军事学博士学位");
                }
            },
            FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("404", "博士,管理学博士学位");
                }
            },
            FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("405", "博士,艺术学博士学位");
                }
            },
            SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("406", "博士,临床医学博士专业学位");
                }
            },
            SEVEN {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("407", "博士,兽医博士专业学位");
                }
            },
            EIGHT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("408", "博士,口腔医学博士专业学位");
                }
            },
            NINE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("409", "博士,经济学博士学位");
                }
            },
            ONE_ZERO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("410", "博士,经济学博士学位");
                }
            },
            ONE_ONE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("411", "博士,教育学博士学位");
                }
            },
            ONE_TWO {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("412", "博士,文学博士学位");
                }
            },
            ONE_THREE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("413", "博士,历史学博士学位");
                }
            },
            ONE_FOUR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("414", "博士,理学博士学位");
                }
            },
            ONE_FIVE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("415", "博士,工学博士学位");
                }
            },
            ONE_SIX {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("416", "博士,农学博士学位");
                }
            },
        }
    }

    /**
     * 教职工状态
     */
    public interface StaffStatus {

        enum OnDutyOnPost implements IStaffConstant {
            NORMAL {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("101", "正常");
                }
            },
            REHIRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("102", "返聘");
                }
            },
            EXTENSION_HIRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("103", "延聘");
                }
            },
            TO_BE_HIRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("104", "待退休");
                }
            }
        }

        enum OnDutyOffPost implements IStaffConstant {
            ASST {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("201", "支教");
                }
            },
            LONG_SICK {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("202", "长病假");
                }
            },
            ABORT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("203", "因公出国");
                }
            },
            FURLOUGH {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("204", "待岗");
                }
            },
            UNACCOUNTED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("205", "下落不明");
                }
            },
            SUSPEND {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("206", "停薪留职");
                }
            }
        }

        enum OffDutyOnPost implements IStaffConstant {
            EXTERNALLY_HIRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("301", "非本校职工（外聘）");
                }
            },
            EXTERNALLY_ASST {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("302", "非本校职工（支教）");
                }
            }
        }

        enum OffDutyOffPost implements IStaffConstant {
            RETIRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("401", "退休");
                }
            },
            LEAVE_OFFICE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("402", "离休");
                }
            },
            DEPARTED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("403", "死亡");
                }
            },
            TRANSFERRED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("404", "调职");
                }
            },
            RESIGNED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("405", "辞职");
                }
            },
            LEAVE_JOB {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("406", "离职");
                }
            },
            DISCHARGED {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("407", "开除");
                }
            }
        }
    }

    /**
     * 教师类型
     */
    public interface StaffType {

        enum ExtPartTime implements IStaffConstant {
            INDUSTRY_MENTOR {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("301", "行业导师");
                }
            },
            EXT_TEACHER {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("302", "校外教师");
                }
            }
        }
    }

    /**
     * 教职工类别
     */
    public interface StaffCategory {

        enum ExtStaff implements IStaffConstant {
            RES_PUB_INST {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("301", "聘请校外教师-来自高校以外科研或事业单位");
                }
            },
            ENTERPRISE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("302", "聘请校外教师-来自校外企业");
                }
            },
            ABROAD {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("303", "聘请校外教师-国外聘请");
                }
            },
            COLLEGE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("304", "聘请校外教师-其他高校");
                }
            },
            SUBSTITUTE {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("305", "聘请校外教师-代课教师");
                }
            },
            PART_TIME {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("306", "聘请校外教师-兼任教师");
                }
            },
            OTHER_PT {
                @Override
                public BaseListRspn.Field.Property getProperty() {
                    return new BaseListRspn.Field.Property("307", "聘请校外教师-其他兼任（职）教师");
                }
            }
        }
    }
}
